package org.nobject.common.ftp;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;

/**
 * Ftp工具类
 * 
 * EXP:
 * 	FtpUtils ftp = new FtpUtils();
 * 	ftp.connectServer("127.0.0.1", "admin", "123456", "config");// 连接ftp服务器
 * 	//上传文件到 info2 文件夹下
 * 	System.out.println("filesize:" + ftp.upload("C:/a.txt") + "字节");
 * 	//取得info2文件夹下的所有文件列表,并下载到 E盘下
 * 	List list = ftp.getFileList(".");
 * 	for (int i = 0; i < list.size(); i++) {
 * 		String filename = (String) list.get(i);
 * 		ftp.download(filename, "E:/" + filename);
 * 	}
 *
 * @author bianrongjun
 * @version 1.0
 */
public class FtpUtils {

	FtpClient ftpClient;
/*
	*//**
	 * connectServer 连接ftp服务器
	 * 
	 * @param path 文件夹，空代表根目录
	 * @param password 密码
	 * @param user 登陆用户
	 * @param server 服务器地址
	 *//*
	public void connectServer(String server, String user, String password, String path) throws IOException {
		// server：FTP服务器的IP地址；user:登录FTP服务器的用户名
		// password：登录FTP服务器的用户名的口令；path：FTP服务器上的路径
		ftpClient = new FtpClient();
		ftpClient.openServer(server);
		ftpClient.login(user, password);
		// path是ftp服务下主目录的子目录
		if (path.length() != 0)
			ftpClient.cd(path);
		// 用2进制上传、下载
		ftpClient.binary();
	}

	*//**
	 * upload 上传文件
	 * 
	 * @throws java.lang.Exception
	 * @return -1 文件不存在 -2 文件内容为空 >0 成功上传，返回文件的大小
	 * @param newname 上传后的新文件名
	 * @param filename 上传的文件
	 *//*
	public long upload(String filename, String newname) throws Exception {
		long result = 0;
		TelnetOutputStream os = null;
		FileInputStream is = null;
		try {
			java.io.File file_in = new java.io.File(filename);
			if (!file_in.exists())
				return -1;
			if (file_in.length() == 0)
				return -2;
			os = ftpClient.put(newname);
			result = file_in.length();
			is = new FileInputStream(file_in);
			byte[] bytes = new byte[1024];
			int c;
			while ((c = is.read(bytes)) != -1) {
				os.write(bytes, 0, c);
			}
		} finally {
			if (is != null) {
				is.close();
			}
			if (os != null) {
				os.close();
			}
		}
		return result;
	}

	*//**
	 * 上传
	 * @param filename 文件名
	 *//*
	public long upload(String filename) throws Exception {
		String newname = "";
		if (filename.indexOf("/") > -1) {
			newname = filename.substring(filename.lastIndexOf("/") + 1);
		} else {
			newname = filename;
		}
		return upload(filename, newname);
	}

	*//**
	 * download 从ftp下载文件到本地
	 * 
	 * @param newfilename 本地生成的文件名
	 * @param filename 服务器上的文件名
	 *//*
	public long download(String filename, String newfilename) throws Exception {
		long result = 0;
		TelnetInputStream is = null;
		FileOutputStream os = null;
		try {
			is = ftpClient.get(filename);
			java.io.File outfile = new java.io.File(newfilename);
			os = new FileOutputStream(outfile);
			byte[] bytes = new byte[1024];
			int c;
			while ((c = is.read(bytes)) != -1) {
				os.write(bytes, 0, c);
				result = result + c;
			}
		} catch (IOException e) {
			throw new RuntimeException(e);
		} finally {
			if (is != null) {
				is.close();
			}
			if (os != null) {
				os.close();
			}
		}
		return result;
	}

	*//**
	 * 取得某个目录下的所有文件列表
	 *//*
	@SuppressWarnings("deprecation")
	public List getFileList(String path) {
		List list = new ArrayList();
		try {
			DataInputStream dis = new DataInputStream(ftpClient.nameList(path));
			String filename = "";
			while ((filename = dis.readLine()) != null) {
				list.add(filename);
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return list;
	}

	*//**
	 * closeServer 断开与ftp服务器的链接
	 *//*
	public void closeServer() throws IOException {
		try {
			if (ftpClient != null) {
				ftpClient.closeServer();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}*/
}
